package com.utm.gameoka;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.content.Context;
import android.util.Base64;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class Partidas {

	// private String
	// urlService="http://www.studio77-k.com/desarrollo/webservice/oca/index.php/service/";
	private String urlService;
	private Context fileContext;
	public String idpartida;

	public Partidas(Context fileContext) {
		this.fileContext = fileContext;
		Webservice oWebservice = new Webservice();
		this.urlService = oWebservice.getService();
	}

	// Crear partida

	public boolean crearPartida(String username, JSONObject jParticipantes) {
		try {
						
			byte[] bParticipantes = jParticipantes.toString().getBytes("UTF-8");
			String b6Participantes = Base64.encodeToString(bParticipantes,
					Base64.DEFAULT);
			String sParticipantes = jParticipantes.toString();

			HttpClient httpClient = new DefaultHttpClient();
			String parametros = "crearPartidaCompleta/user/" + username+ "/invitados/"; 
			parametros += URLEncoder.encode(b6Participantes, "UTF-8");					
			String formato = "/formato/json";
			//String uUrl = URLEncoder.encode(parametros + formato, "UTF-8");
			String uUrl =parametros + formato;
			
			uUrl = urlService + uUrl;
			HttpGet oConexion = new HttpGet(uUrl);

			oConexion.setHeader("content-type", "application/json");

			HttpResponse oRespuesta = httpClient.execute(oConexion);
			String sResponse = EntityUtils.toString(oRespuesta.getEntity());

			JSONObject sJSON = new JSONObject(sResponse);
			JSONObject aJson = new JSONObject(sJSON.getString("partida"));
			this.idpartida = aJson.getString("partida");
			if (aJson.getString("partida") != "") {
				return true;
			} else {
				return false;
			}
		} catch (Exception ex) {
			Log.e("Log partidas", "Error!", ex);
			return false;
		}

	}

	// Obtener Partidas
	public List<PartidaModel> obtenerPartidas(String username) {

		HttpClient httpClient = new DefaultHttpClient();
		String parametros = "partidas/";
		parametros+="user/"+username;
		String formato = "/formato/json";
		HttpGet oConexion = new HttpGet(urlService + parametros + formato);

		oConexion.setHeader("content-type", "application/json");

		List<PartidaModel> listaPartida = new ArrayList<PartidaModel>();

		try {
			HttpResponse oRespuesta = httpClient.execute(oConexion);
			String sResponse = EntityUtils.toString(oRespuesta.getEntity());

			JSONObject sJSON = new JSONObject(sResponse);
			//
			if (sJSON.length() > 0) {
				JSONArray dJson = sJSON.getJSONArray("partidas");
				for (int i = 0; i < dJson.length(); i++) {
					JSONObject tJson = dJson.getJSONObject(i);
					PartidaModel oPartida = new PartidaModel();
					oPartida.setPartida(tJson.getString("fecha"));
					listaPartida.add(oPartida);
				}
			}
			return listaPartida;

		} catch (Exception ex) {
			Log.e("Log Partidas", "Carga de partidas", ex);
		}

		return listaPartida;
	}
	
	//Confirmar una partida
	public boolean confirmarPartida(String user, String partida){
		
		try {
			
			HttpClient httpClient = new DefaultHttpClient();
			String parametros = "confirmarPartida/invitado/" + user+ "/partida/"+partida; 							
			String formato = "/formato/json";
			String uUrl =parametros + formato;
			
			uUrl = urlService + uUrl;
			HttpGet oConexion = new HttpGet(uUrl);

			oConexion.setHeader("content-type", "application/json");

			HttpResponse oRespuesta = httpClient.execute(oConexion);
			String sResponse = EntityUtils.toString(oRespuesta.getEntity());
			JSONObject sJSON = new JSONObject(sResponse);
						
			if (sJSON.getString("error") == "false") {
				return true;
			} else {
				return false;
			}
		} catch (Exception ex){
			Log.e("Log partidas", "Error!", ex);
			return false;
		}		
		
		
	} 

	// Obtiene solo una partida
	public String obtenerPartida() {

		return null;
	}

	// Eliminar partidas
	public Boolean eliminarPartida() {

		return false;
	}

	// Obtiene listado de jugadores
	public List<InvitadoModel> jugadoresPartida(String partida) {

		HttpClient httpClient = new DefaultHttpClient();
		String parametros = "participantes/";
		parametros+="partida/"+partida;
		String formato = "/formato/json";
		HttpGet oConexion = new HttpGet(urlService + parametros + formato);

		oConexion.setHeader("content-type", "application/json");

		List<InvitadoModel> listaInvitado = new ArrayList<InvitadoModel>();

		try {
			HttpResponse oRespuesta = httpClient.execute(oConexion);
			String sResponse = EntityUtils.toString(oRespuesta.getEntity());

			JSONObject sJSON = new JSONObject(sResponse);
			//
			if (sJSON.length() > 0) {				
					JSONArray dJson = (JSONArray) sJSON.getJSONArray("participantes");
					for(int j =0; j < dJson.length() ; j++){
						JSONObject tJson = dJson.getJSONObject(j);
						String turno =tJson.getString("en_turno"); 
						int iTurno = Integer.parseInt(turno);
						if(iTurno != 1){
							InvitadoModel oInvitado = new InvitadoModel();
							oInvitado.setUsuario(tJson.getString("usuario"));
							oInvitado.setEstado(tJson.getString("confirmado"));
							listaInvitado.add(oInvitado);
						}
					}								
			}
			return listaInvitado;

		} catch (Exception ex) {
			Log.e("Log Partidas", "Carga de participantes", ex);
		}
		return listaInvitado;
	}
	
	//Obtiene las solicitudes
	public List<SolicitudModel> obtenerSolicitudes(String user){
		
		HttpClient httpClient = new DefaultHttpClient();
		String parametros = "solicitudes/";
		parametros+="user/"+user;
		String formato = "/formato/json";
		HttpGet oConexion = new HttpGet(urlService + parametros + formato);

		oConexion.setHeader("content-type", "application/json");

		List<SolicitudModel> listaSolicitudes = new ArrayList<SolicitudModel>();

		try {
			HttpResponse oRespuesta = httpClient.execute(oConexion);
			String sResponse = EntityUtils.toString(oRespuesta.getEntity());

			JSONObject sJSON = new JSONObject(sResponse);
			//
			if (sJSON.length() > 0) {				
					JSONArray dJson = (JSONArray) sJSON.getJSONArray("solicitudes");
					for(int j =0; j < dJson.length() ; j++){
						JSONObject tJson = dJson.getJSONObject(j);
						//String turno =tJson.getString("en_turno"); 						
						
							SolicitudModel oSolicitud = new SolicitudModel();
							oSolicitud.setUsuarioPartida(tJson.getString("partida")); //usuario que envia la solicitud
							oSolicitud.setFecha(tJson.getString("fecha"));
							oSolicitud.setPartida(tJson.getString("usuario"));
							oSolicitud.setIdPartida(tJson.getString("id_partida"));
							listaSolicitudes.add(oSolicitud);
						
					}								
			}
			return listaSolicitudes;

		} catch (Exception ex) {
			Log.e("Log Partidas", "Carga de solicitudes", ex);
		}
		return listaSolicitudes;		
		
	}
}
